#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <asm/barrier.h>


static int __init my_init(void)
{
    int data = 0;
    volatile int *shared_mem = kmalloc(sizeof(int), GFP_KERNEL);

    if (!shared_mem) {
        printk(KERN_ERR "Failed to allocate memory.\n");
        return -ENOMEM;
    }

    // 写操作
    *shared_mem = 1;
    wmb();

    // 读操作
    data = *shared_mem;
    rmb();

    printk(KERN_INFO "Data read from shared memory: %d\n", data);

    kfree((const void *)shared_mem);

    return 0;
}

static void __exit my_exit(void)
{
    printk(KERN_INFO "Module unloaded.\n");
}

module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");

